package org.zuel.huhuForum.service;


import org.springframework.security.core.GrantedAuthority;
import org.zuel.huhuForum.model.User;
import org.zuel.huhuForum.param.LoginTicket;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Collection;
import java.util.List;
import java.util.Map;


public interface IUserService {
    /**
     * 根据 Id 查询用户
     * @param id
     * @return
     */
    public User findUserById (int id);

    /**
     * 根据 username 查询用户
     * @param username
     * @return
     */
    public User findUserByName(String username);

    /**
     * 用户注册
     * @param user
     * @return Map<String, Object> 返回错误提示消息，如果返回的 map 为空，则说明注册成功
     */
    public Map<String, Object> register(User user) throws InvalidKeySpecException, NoSuchAlgorithmException;

    /**
     * 用户登录（为用户创建凭证,密码）
     * @param email
     * @param password
     * @param expiredSeconds 多少秒后凭证过期
     * @return Map<String, Object> 返回错误提示消息以及 ticket(凭证)
     */
    public Map<String, Object> login(String email, String password, int expiredSeconds) throws InvalidKeySpecException, NoSuchAlgorithmException;

    /**
     * 用户登录（为用户创建凭证,密码）
     * @param email
     * @param expiredSeconds 多少秒后凭证过期
     * @return Map<String, Object> 返回错误提示消息以及 ticket(凭证)
     */
    public Map<String, Object> loginma(String email ,int expiredSeconds);
    /**
     * 用户退出（将凭证状态设为无效）
     * @param ticket
     */
    public void logout(String ticket);

    /**
     * 根据 ticket 查询 LoginTicket 信息
     * @param ticket
     * @return
     */
    public LoginTicket findLoginTicket(String ticket);

    /**
     * 修改状态
     * @param userid
     * @param state
     * @return
     */
    public boolean updateState(Integer userid,Integer state);

    /**
     * 查询未激活状态用户
     * @return
     */
    public List<User> selectState();

    /**
     * 修改用户头像
     * @param userId
     * @param headUrl
     * @return
     */
    public int updateHeader(int userId, String headUrl);

    /**
     * 修改用户密码（对新密码加盐加密存入数据库）
     * @param userId
     * @param newPassword 新密码
     * @return
     */
    public int updatePassword(int userId, String newPassword) throws InvalidKeySpecException, NoSuchAlgorithmException;



    /**
     * 获取某个用户的权限
     * @param userId
     * @return
     */
    public Collection<? extends GrantedAuthority> getAuthorities(int userId);


    /** 重置密码*/
    Map<String, Object> doResetPwd(String email, String password) throws InvalidKeySpecException, NoSuchAlgorithmException;
}
